package MyDP;

/**
 * 152. 乘积最大子数组
 * 给你一个整数数组 nums ，请你找出数组中乘积最大的连续子数组（该子数组中至少包含一个数字），并返回该子数组所对应的乘积。
 * 示例 1:
 *
 * 输入: [2,3,-2,4]
 * 输出: 6
 * 解释: 子数组 [2,3] 有最大乘积 6。
 */
public class Leetcode0152 {
    public static int maxProduct(int[] nums) {
        int ans = Integer.MIN_VALUE;

        int[] imax = new int[nums.length+1];
        int[] imin = new int[nums.length+1];
        imin[0] = 1;
        imax[0] = 1;

        for(int i=1; i<=nums.length; i++){
            imax[i] = Math.max(nums[i-1], Math.max(imax[i-1] * nums[i-1], imin[i-1] * nums[i-1]));
            imin[i] = Math.min(nums[i-1], Math.min(imax[i-1] * nums[i-1], imin[i-1] * nums[i-1]));
            ans = Math.max(imax[i], ans);
        }
        return ans;
    }

    public static void main(String[] args) {
        int[] nums = new int[]{2,3,-1,5};
        System.out.println(maxProduct(nums));
    }
}
